From: Boyuan Yang Date: Sat, 4 Jun 2022 15:39:42 +0000 (-0400) Subject: New upstream version 1.1.4+ds1 X-Git-Tag: archive/raspbian/1.1.9+ds1-4+rpi1^2^2~15^2~5 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=8f8c4728bebd8bb599e0d964390ff95fab7a9dae;p=opencc.git New upstream version 1.1.4+ds1 --- diff --git a/.appveyor.yml b/.appveyor.yml index 06278bf..bde79a0 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -12,7 +12,6 @@ environment: - nodejs_version: 16 - nodejs_version: 14 - nodejs_version: 12 - - nodejs_version: 10 # Build plain C++ - nodejs_version: none diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index a9e3033..4f4344e 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -13,7 +13,7 @@ jobs: strategy: matrix: - node-version: [10.x, 12.x, 14.x, 16.x] + node-version: [12.x, 14.x, 16.x] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 51b393b..e7f6ee7 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.5, 3.6, 3.7, 3.8, 3.9] + python-version: [3.7, 3.8, 3.9, '3.10'] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/release-pypi.yml b/.github/workflows/release-pypi.yml index 27e0b27..c9f6e91 100644 --- a/.github/workflows/release-pypi.yml +++ b/.github/workflows/release-pypi.yml @@ -19,7 +19,7 @@ jobs: docker run --rm -v "${PWD}:/opt/OpenCC" \ -e TWINE_USERNAME=__token__ \ -e TWINE_PASSWORD=${{ secrets.PYPI_TOKEN }} \ - ubuntu:16.04 /bin/bash /opt/OpenCC/release-pypi-linux.sh + ubuntu:18.04 /bin/bash /opt/OpenCC/release-pypi-linux.sh - name: Build package and upload (macOS) if: runner.os == 'macOS' diff --git a/.travis.yml b/.travis.yml index c9728ef..2e7269c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,6 @@ node_js: - 16 - 14 - 12 - - 10 os: - linux diff --git a/CMakeLists.txt b/CMakeLists.txt index 07e3745..d2ae987 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,7 +42,7 @@ set (PACKAGE_URL https://github.com/BYVoid/Opencc) set (PACKAGE_BUGREPORT https://github.com/BYVoid/Opencc/issues) set (OPENCC_VERSION_MAJOR 1) set (OPENCC_VERSION_MINOR 1) -set (OPENCC_VERSION_REVISION 3) +set (OPENCC_VERSION_REVISION 4) if (CMAKE_BUILD_TYPE MATCHES Debug) set (version_suffix .Debug) diff --git a/NEWS.md b/NEWS.md index 44c544f..1056b79 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,13 @@ # Change History of OpenCC +## Version 1.1.4 + +2022年6月4日 + +* 支持Python 3.10([#637](https://github.com/BYVoid/OpenCC/issues/637)。 +* 移除针对Python 2.7、3.5、3.6和Node 10的构建([#690](https://github.com/BYVoid/OpenCC/issues/690), [#691](https://github.com/BYVoid/OpenCC/issues/691))。 +* 若干其他小修復。 + ## Version 1.1.3 2021年9月3日 diff --git a/README.md b/README.md index 4af8d37..7225e01 100644 --- a/README.md +++ b/README.md @@ -110,12 +110,14 @@ Document 文檔: https://byvoid.github.io/OpenCC/ ### Others (Unofficial) * Swift (iOS): [SwiftyOpenCC](https://github.com/XQS6LB3A/SwiftyOpenCC) +* iOSOpenCC (pod): [iOSOpenCC](https://github.com/swiftdo/OpenCC) * Java: [opencc4j](https://github.com/houbb/opencc4j) * Android: [android-opencc](https://github.com/qichuan/android-opencc) * PHP: [opencc4php](https://github.com/nauxliu/opencc4php) * Pure JavaScript: [opencc-js](https://github.com/nk2028/opencc-js) * WebAssembly: [wasm-opencc](https://github.com/oyyd/wasm-opencc) * Browser Extension: [opencc-extension](https://github.com/tnychn/opencc-extension) +* Go (Pure): [OpenCC for Go](https://github.com/longbridgeapp/opencc) ### Configurations 配置文件 @@ -274,7 +276,8 @@ All these libraries are statically linked by default. * [Cychih](https://github.com/pi314) * [kyleskimo](https://github.com/kyleskimo) * [Ryuan Choi](https://github.com/bunhere) +* [Prcuvu](https://github.com/Prcuvu) * [Tony Able](https://github.com/TonyAble) * [Xiao Liang](https://github.com/yxliang01) -Please update this list you have contributed OpenCC. +Please feel free to update this list if you have contributed OpenCC. diff --git a/data/dictionary/JPShinjitaiCharacters.txt b/data/dictionary/JPShinjitaiCharacters.txt index 4dd885f..2b19e66 100644 --- a/data/dictionary/JPShinjitaiCharacters.txt +++ b/data/dictionary/JPShinjitaiCharacters.txt @@ -4,3 +4,4 @@ 欠 缺 欠 糸 絲 糸 芸 藝 芸 +浜 濱 浜 diff --git a/data/dictionary/JPVariants.txt b/data/dictionary/JPVariants.txt index 6ed3b92..3a8468b 100644 --- a/data/dictionary/JPVariants.txt +++ b/data/dictionary/JPVariants.txt @@ -158,7 +158,7 @@ 淨 浄 淺 浅 渴 渇 -溌 潑 +潑 溌 溪 渓 溫 温 溼 湿 @@ -216,7 +216,7 @@ 穗 穂 穩 穏 穰 穣 -竃 竈 +竈 竃 竊 窃 粹 粋 糉 粽 @@ -229,7 +229,7 @@ 縣 県 縱 縦 總 総 -繋 繫 +繫 繋 繡 繍 繩 縄 繪 絵 @@ -312,7 +312,7 @@ 鄉 郷 酢 醋 醉 酔 -醗 醱 +醱 醗 醫 医 醬 醤 釀 醸 diff --git a/data/dictionary/STCharacters.txt b/data/dictionary/STCharacters.txt index 912d162..89edbc9 100644 --- a/data/dictionary/STCharacters.txt +++ b/data/dictionary/STCharacters.txt @@ -455,7 +455,7 @@ 坚 堅 坛 壇 罈 坜 壢 -坝 壩 +坝 壩 垻 坞 塢 坟 墳 坠 墜 @@ -952,6 +952,7 @@ 汉 漢 汤 湯 汹 洶 +沄 澐 沈 沈 瀋 沟 溝 没 沒 @@ -3863,26 +3864,114 @@ 𫢸 僤 𫧃 𣍐 𫧮 𪋿 +𫫇 噁 𫬐 㘔 +𫭟 塸 +𫭢 埨 +𫭼 𡑍 𫮃 墠 𫰛 娙 +𫵷 㠣 𫶇 嵽 𫷷 廞 𫸩 彄 𬀩 暐 +𬀪 晛 +𬂩 梜 +𬃊 櫍 +𬇕 澫 +𬇙 浿 +𬇹 漍 +𬉼 熰 +𬊈 燖 +𬊤 燀 +𬍛 瓅 +𬍡 璗 +𬍤 璕 +𬒈 礐 +𬒗 𥗽 +𬕂 篢 +𬘓 紃 +𬘘 紞 +𬘡 絪 +𬘩 綎 +𬘫 綄 +𬘬 綪 +𬘭 綝 +𬘯 綧 +𬙂 縯 +𬙊 纆 +𬙋 纕 +𬜬 蔄 +𬜯 䓣 +𬞟 蘋 +𬟁 虉 +𬟽 蝀 +𬣙 訏 +𬣞 詝 +𬣡 諓 +𬣳 詪 +𬤇 諲 +𬤊 諟 +𬤝 譓 +𬨂 軝 +𬨎 輶 +𬩽 鄩 +𬪩 醲 +𬬩 釴 𬬭 錀 +𬬮 鋹 +𬬱 釿 +𬬸 鉥 +𬬹 鉮 𬬻 鑪 +𬬿 鉊 +𬭁 鉧 𬭊 𨧀 +𬭎 鋐 +𬭚 錞 𬭛 𨨏 +𬭤 鍭 +𬭩 鎓 +𬭬 鏏 𬭭 鏚 +𬭯 䥕 𬭳 𨭎 𬭶 𨭆 +𬭸 鏻 +𬭼 鐩 +𬮱 闉 +𬮿 隑 +𬯀 隮 +𬯎 隤 +𬱖 頔 +𬱟 頠 +𬳵 駓 +𬳶 駉 +𬳽 駪 +𬳿 駼 +𬴂 騑 +𬴃 騞 +𬴊 驎 𬶋 鮈 𬶍 鮀 𬶏 鮠 +𬶐 鮡 𬶟 鯻 +𬶠 鰊 +𬶨 鱀 +𬶭 鰶 +𬶮 鱚 +𬷕 鵏 +𬸘 鶠 +𬸚 鸑 +𬸣 鶱 +𬸦 鷟 𬸪 鷭 𬸯 鷿 +𬹼 齘 +𬺈 齮 +𬺓 齼 𰬸 繐 𰰨 菕 𰶎 譅 diff --git a/data/dictionary/STPhrases.txt b/data/dictionary/STPhrases.txt index 5a57bdc..5798c78 100644 --- a/data/dictionary/STPhrases.txt +++ b/data/dictionary/STPhrases.txt @@ -294,6 +294,7 @@ 七余 七餘 七八下里 七八下裏 七出 七出 +七出戏 七齣戲 七出祁山 七出祁山 七分钟 七分鐘 七划 七劃 @@ -696,6 +697,7 @@ 三冬 三冬 三冬两夏 三冬兩夏 三准 三準 +三出戏 三齣戲 三出祁山 三出祁山 三分钟 三分鐘 三只 三隻 @@ -1057,7 +1059,7 @@ 不可胜言 不可勝言 不可胜计 不可勝計 不可胜记 不可勝記 -不吃烟火食 不吃煙火食 +不吃烟火食 不喫煙火食 不合 不合 不合体统 不合體統 不合作 不合作 @@ -1134,7 +1136,7 @@ 不差毫发 不差毫髮 不干 不幹 不乾 不干不净 不乾不淨 -不干不淨吃了没病 不乾不淨吃了沒病 +不干不淨吃了没病 不乾不淨喫了沒病 不干了 不幹了 不干事 不幹事 不干他 不干他 @@ -2221,7 +2223,7 @@ 乌滋别克 烏滋別克 乌滋别克斯坦 烏滋別克斯坦 乌烟瘴气 烏煙瘴氣 -乌狗吃食白狗当灾 烏狗吃食白狗當災 +乌狗吃食白狗当灾 烏狗喫食白狗當災 乌苏 烏蘇 乌苏市 烏蘇市 乌苏拉 烏蘇拉 @@ -2297,6 +2299,7 @@ 九亿五千万 九億五千萬 九余 九餘 九冬 九冬 +九出戏 九齣戲 九出祁山 九出祁山 九分钟 九分鐘 九划 九劃 @@ -3948,7 +3951,7 @@ 似松实紧 似鬆實緊 佃租制度 佃租制度 但云 但云 -但得一片橘皮吃且莫忘了洞庭湖 但得一片橘皮吃且莫忘了洞庭湖 +但得一片橘皮吃且莫忘了洞庭湖 但得一片橘皮喫且莫忘了洞庭湖 但愿 但願 但愿如此 但願如此 但曲 但曲 @@ -4372,7 +4375,7 @@ 侵蚀基准 侵蝕基準 便了 便了 便于 便於 -便吃干 便吃乾 +便吃干 便喫乾 便宜不过当家 便宜不過當家 便当 便當 便当店 便當店 @@ -5490,7 +5493,7 @@ 党外 黨外 党外人士 黨外人士 党太尉 党太尉 -党太尉吃匾食 党太尉吃匾食 +党太尉吃匾食 党太尉喫匾食 党委 黨委 党委书记 黨委書記 党委会 黨委會 @@ -5659,6 +5662,7 @@ 全面禁止核试验条约 全面禁止核試驗條約 全面规划 全面規劃 全面进行 全面進行 +兩出戏 兩齣戲 八万 八萬 八万一千 八萬一千 八万四千法门 八萬四千法門 @@ -5670,6 +5674,7 @@ 八余 八餘 八克 八克 八军团 八軍團 +八出戏 八齣戲 八出祁山 八出祁山 八十天环游地球 八十天環遊地球 八十种好 八十種好 @@ -5789,6 +5794,7 @@ 六余 六餘 六冲 六沖 六出奇计 六出奇計 +六出戏 六齣戲 六出祁山 六出祁山 六厂 六廠 六发 六發 @@ -7326,7 +7332,7 @@ 出宰 出宰 出家 出家 出家人 出家人 -出家人吃八方 出家人吃八方 +出家人吃八方 出家人喫八方 出将入相 出將入相 出小恭 出小恭 出尔反尔 出爾反爾 @@ -7366,7 +7372,7 @@ 出恭 出恭 出息 出息 出意外 出意外 -出戏 齣戲 +出戏 出戏 齣戲 出战 出戰 出户 出戶 出手 出手 @@ -7794,7 +7800,7 @@ 切当 切當 切菜板 切菜板 切除术 切除術 -切面 切面 +切面 切面 切麵 切骨之仇 切骨之仇 刊了 刊了 刊出 刊出 @@ -11594,6 +11600,7 @@ 口出恶言 口出惡言 口出秽言 口出穢言 口占 口占 +口吃 口吃 口布 口布 口干 口乾 口干舌燥 口乾舌燥 @@ -11723,7 +11730,7 @@ 只可在 只可在 只可意会不可言传 只可意會不可言傳 只叹 只嘆 -只吃 只吃 +只吃 只喫 只合 只合 只含 只含 只听 只聽 @@ -12710,59 +12717,60 @@ 吁气 吁氣 吁求 籲求 吁请 籲請 -吃一顿挨一顿 吃一頓挨一頓 -吃不了 吃不了 -吃不出 吃不出 -吃不出来 吃不出來 -吃了 吃了 -吃了定心丸 吃了定心丸 -吃了秤砣 吃了秤砣 -吃了蜜蜂儿屎似的 吃了蜜蜂兒屎似的 -吃了饭 吃了飯 -吃亏上当 吃虧上當 -吃亏就是占便宜 吃虧就是佔便宜 -吃人一个蛋恩情无法断 吃人一個蛋恩情無法斷 -吃人虫 吃人蟲 -吃伤了 吃傷了 -吃几碗干饭 吃幾碗乾飯 -吃出 吃出 -吃合家欢 吃合家歡 -吃后悔药 吃後悔藥 -吃回头草 吃回頭草 -吃地面 吃地面 -吃姜 吃薑 -吃完面 吃完麪 -吃尽 吃盡 -吃尽当光 吃盡當光 -吃干了 吃乾了 -吃干醋 吃乾醋 -吃得了 吃得了 -吃得出 吃得出 -吃得出来 吃得出來 -吃挂络儿 吃掛絡兒 -吃敲才 吃敲才 -吃板刀面 吃板刀麪 -吃枪药 吃槍藥 -吃烟 吃煙 -吃药 吃藥 -吃药前 吃藥前 -吃药后 吃藥後 -吃药时 吃藥時 -吃豆干 吃豆乾 -吃辣面 吃辣麪 -吃过面 吃過麪 -吃里扒外 吃裏扒外 -吃里爬外 吃裏爬外 -吃钉板 吃釘板 -吃错药 吃錯藥 -吃闲话 吃閒話 -吃闲饭 吃閒飯 -吃面 吃麪 -吃饭傢伙 吃飯傢伙 -吃饭别忘了种谷人 吃飯別忘了種穀人 -吃饭家伙 吃飯家伙 -吃饱了饭撑的 吃飽了飯撐的 -吃饱没事干 吃飽沒事幹 +吃一顿挨一顿 喫一頓挨一頓 +吃不了 喫不了 +吃不出 喫不出 +吃不出来 喫不出來 +吃了 喫了 +吃了定心丸 喫了定心丸 +吃了秤砣 喫了秤砣 +吃了蜜蜂儿屎似的 喫了蜜蜂兒屎似的 +吃了饭 喫了飯 +吃亏上当 喫虧上當 +吃亏就是占便宜 喫虧就是佔便宜 +吃亏的是乖占便宜的是呆 喫虧的是乖占便宜的是呆 +吃人一个蛋恩情无法断 喫人一個蛋恩情無法斷 +吃人虫 喫人蟲 +吃伤了 喫傷了 +吃几碗干饭 喫幾碗乾飯 +吃出 喫出 +吃合家欢 喫合家歡 +吃后悔药 喫後悔藥 +吃回头草 喫回頭草 +吃地面 喫地面 +吃姜 喫薑 +吃完面 喫完麪 +吃尽 喫盡 +吃尽当光 喫盡當光 +吃干了 喫乾了 +吃干醋 喫乾醋 +吃得了 喫得了 +吃得出 喫得出 +吃得出来 喫得出來 +吃挂络儿 喫掛絡兒 +吃敲才 喫敲才 +吃板刀面 喫板刀麪 +吃枪药 喫槍藥 +吃烟 喫煙 +吃药 喫藥 +吃药前 喫藥前 +吃药后 喫藥後 +吃药时 喫藥時 +吃豆干 喫豆乾 +吃辣面 喫辣麪 +吃过面 喫過麪 +吃里扒外 喫裏扒外 +吃里爬外 喫裏爬外 +吃钉板 喫釘板 +吃错药 喫錯藥 +吃闲话 喫閒話 +吃闲饭 喫閒飯 +吃面 喫麪 +吃饭傢伙 喫飯傢伙 +吃饭别忘了种谷人 喫飯別忘了種穀人 +吃饭家伙 喫飯家伙 +吃饱了饭撑的 喫飽了飯撐的 +吃饱没事干 喫飽沒事幹 各不相同 各不相同 各个 各個 各个击破 各個擊破 @@ -12884,8 +12892,8 @@ 合口味 合口味 合口呼 合口呼 合叶 合葉 -合吃 合吃 -合吃族 合吃族 +合吃 合喫 +合吃族 合喫族 合合 合合 合同 合同 合同各方 合同各方 @@ -13399,8 +13407,8 @@ 同参 同參 同右 同右 同号 同號 -同吃 同吃 -同吃同住 同吃同住 +同吃 同喫 +同吃同住 同喫同住 同名 同名 同名之累 同名之累 同名同姓 同名同姓 @@ -15262,7 +15270,6 @@ 喧哄 喧鬨 喧哗 喧譁 喧噪 喧噪 -喫亏的是乖占便宜的是呆 喫虧的是乖占便宜的是呆 喷云吐雾 噴雲吐霧 喷云嗳雾 噴雲噯霧 喷出 噴出 @@ -16610,7 +16617,6 @@ 复习考 複習考 复书 復書 复交 復交 -复亩珍 複畝珍 复仇 復仇 复仇者 復仇者 复仇记 復仇記 @@ -17073,7 +17079,7 @@ 多发病 多發病 多只 多隻 多台 多臺 -多吃多占 多吃多佔 +多吃多占 多喫多佔 多向 多向 多哈回合 多哈回合 多回 多回 @@ -17417,9 +17423,9 @@ 大获 大獲 大获全胜 大獲全勝 大虫 大蟲 -大虫不吃伏肉 大蟲不吃伏肉 +大虫不吃伏肉 大蟲不喫伏肉 大虫口里倒涎 大蟲口裏倒涎 -大虫吃小虫 大蟲吃小蟲 +大虫吃小虫 大蟲喫小蟲 大虫头上做窠 大蟲頭上做窠 大蜡 大蜡 大衍历 大衍曆 @@ -19137,7 +19143,7 @@ 就出 就出 就出去 就出去 就出来 就出來 -就吃干 就吃乾 +就吃干 就喫乾 就回 就回 就回去 就回去 就回来 就回來 @@ -20009,7 +20015,6 @@ 布气 布氣 布水 布水 布法罗 布法羅 -布洒器 布灑器 布洛克 布洛克 布洛斯顿 布洛斯頓 布洛沙德 布洛沙德 @@ -20028,7 +20033,6 @@ 布瑞斯特 布瑞斯特 布瑞特 布瑞特 布瑞顿 布瑞頓 -布用填 布用填 布疋 布疋 布疑阵 佈疑陣 布痕瓦尔德 布痕瓦爾德 @@ -20791,7 +20795,7 @@ 平复帖 平復帖 平复起来 平復起來 平头并进 平頭並進 -平安里 平安裏 +平安里 平安里 平定准噶尔回部得胜图 平定準噶爾回部得勝圖 平平当当 平平當當 平康里 平康里 @@ -21477,7 +21481,7 @@ 弄盏传杯 弄盞傳杯 弄粉调朱 弄粉調朱 弄脏 弄髒 -弄面吃 弄麪吃 +弄面吃 弄麪喫 弄鬼吊猴 弄鬼弔猴 弈秋 弈秋 弊帚千金 弊帚千金 @@ -22810,7 +22814,7 @@ 快出来 快出來 快升 快升 快去快回 快去快回 -快吃干 快吃乾 +快吃干 快喫乾 快向 快向 快回 快回 快回到 快回到 @@ -23850,7 +23854,7 @@ 手铲 手鏟 手链 手鍊 手鏈 手面 手面 -手面赚吃 手面賺吃 +手面赚吃 手面賺喫 才上到 纔上到 才上去 纔上去 才上来 纔上來 @@ -27771,7 +27775,7 @@ 早知今日悔不当初 早知今日悔不當初 早秋 早秋 早自修 早自修 -早起的鸟儿有虫吃 早起的鳥兒有蟲吃 +早起的鸟儿有虫吃 早起的鳥兒有蟲喫 旭日东升 旭日東昇 旭日初升 旭日初昇 旱干 旱乾 @@ -28205,7 +28209,7 @@ 暗号 暗號 暗号灯 暗號燈 暗叹 暗歎 -暗吃一惊 暗吃一驚 +暗吃一惊 暗喫一驚 暗合 暗合 暗含 暗含 暗喜 暗喜 @@ -31060,7 +31064,7 @@ 武器系统 武器系統 武器级别材料 武器級別材料 武坛 武壇 -武大郎吃毒药 武大郎吃毒藥 +武大郎吃毒药 武大郎喫毒藥 武当 武當 武当山 武當山 武当派 武當派 @@ -34615,7 +34619,7 @@ 猝发 猝發 猢狲入布袋 猢猻入布袋 猥当大任 猥當大任 -猪八戒吃人参果 豬八戒吃人參果 +猪八戒吃人参果 豬八戒喫人參果 猪只 豬隻 猪肉干 豬肉乾 猪肝面 豬肝麪 @@ -35853,7 +35857,6 @@ 相须为命 相須爲命 相须而行 相須而行 盼了 盼了 -盼既示复 盼既示覆 盾板 盾板 省个 省個 省了 省了 @@ -37010,7 +37013,7 @@ 稔恶不悛 稔惡不悛 稠云 稠雲 稳占 穩佔 -稳吃三注 穩吃三注 +稳吃三注 穩喫三注 稳坐钓鱼台 穩坐釣魚臺 稳定物价 穩定物價 稳当 穩當 @@ -37567,7 +37570,6 @@ 算出去 算出去 算出来 算出來 算历 算曆 -算发 算髮 算得了 算得了 算术 算術 算术和 算術和 @@ -39289,6 +39291,7 @@ 肿瘤切除术 腫瘤切除術 胁制 脅制 胃出血 胃出血 +胃口 胃口 胃脏 胃臟 胃药 胃藥 胃药片 胃藥片 @@ -39443,8 +39446,8 @@ 胡厮哄 胡廝哄 胡厮混 胡廝混 胡厮缠 胡廝纏 -胡吃海喝 胡吃海喝 -胡吃闷睡 胡吃悶睡 +胡吃海喝 胡喫海喝 +胡吃闷睡 胡喫悶睡 胡同 衚衕 胡吣 胡唚 胡吹 胡吹 @@ -41655,7 +41658,7 @@ 虫儿 蟲兒 虫出 蟲出 虫卵 蟲卵 -虫吃牙 蟲吃牙 +虫吃牙 蟲喫牙 虫声 蟲聲 虫媒病毒 蟲媒病毒 虫媒花 蟲媒花 @@ -42560,7 +42563,7 @@ 角膜移植术 角膜移植術 角色冲突 角色衝突 角色扮演游戏 角色扮演遊戲 -角落发 角落發 +角落 角落 角落里 角落裏 角谷猜想 角谷猜想 角里 角里 @@ -45070,7 +45073,7 @@ 邢台市 邢臺市 那个 那個 那个人 那個人 -那个猫儿不吃腥 那個貓兒不吃腥 +那个猫儿不吃腥 那個貓兒不喫腥 那个耗子不偷油 那個耗子不偷油 那么 那麼 那么干 那麼幹 @@ -45222,7 +45225,7 @@ 部发 部發 部曲 部曲 部胡林 部胡林 -部落发 部落發 +部落 部落 部落同盟 部落同盟 郭勇志 郭勇志 郭台成 郭臺成 diff --git a/data/dictionary/TSCharacters.txt b/data/dictionary/TSCharacters.txt index 5dc2b2b..a236514 100644 --- a/data/dictionary/TSCharacters.txt +++ b/data/dictionary/TSCharacters.txt @@ -23,6 +23,7 @@ 㞞 𪨊 㟺 𪩇 㠏 㟆 +㠣 𫵷 㢗 𪪑 㢝 𢋈 㥮 㤘 @@ -88,6 +89,7 @@ 䍽 𦍠 䎙 𫅭 䎱 䎬 +䓣 𬜯 䕤 𫟕 䕳 𦰴 䖅 𫟑 @@ -120,6 +122,7 @@ 䥄 𫠀 䥇 䦂 䥑 鿏 +䥕 𬭯 䥗 𫔋 䥩 𨱖 䥯 𫔆 @@ -247,6 +250,7 @@ 僑 侨 僕 仆 僞 伪 +僤 𫢸 僥 侥 僨 偾 僱 雇 @@ -290,7 +294,7 @@ 刪 删 剄 刭 則 则 -剋 克 +剋 克 剋 剎 刹 剗 刬 剛 刚 @@ -389,7 +393,7 @@ 嘸 呒 嘺 𪡀 嘽 啴 -噁 恶 +噁 恶 𫫇 噅 𠯠 噓 嘘 噚 㖊 @@ -439,7 +443,9 @@ 圖 图 團 团 圞 𪢮 +垻 坝 埡 垭 +埨 𫭢 埬 𪣆 埰 采 執 执 @@ -460,10 +466,12 @@ 塢 坞 塤 埙 塵 尘 +塸 𫭟 塹 堑 塿 𪣻 墊 垫 墜 坠 +墠 𫮃 墮 堕 墰 坛 墲 𪢸 @@ -506,6 +514,7 @@ 妝 妆 姍 姗 姦 奸 +娙 𫰛 娛 娱 婁 娄 婡 𫝫 @@ -590,6 +599,7 @@ 嵐 岚 嵗 岁 嵼 𡶴 +嵽 𫶇 嵾 㟥 嶁 嵝 嶄 崭 @@ -643,6 +653,7 @@ 廕 荫 廚 厨 廝 厮 +廞 𫷷 廟 庙 廠 厂 廡 庑 @@ -658,6 +669,7 @@ 張 张 強 强 彃 𪪼 +彄 𫸩 彆 别 彈 弹 彌 弥 @@ -865,9 +877,11 @@ 昇 升 時 时 晉 晋 +晛 𬀪 晝 昼 暈 晕 暉 晖 +暐 𬀩 暘 旸 暢 畅 暫 暂 @@ -897,6 +911,7 @@ 梔 栀 梖 𪱷 梘 枧 +梜 𬂩 條 条 梟 枭 梲 棁 @@ -974,6 +989,7 @@ 檻 槛 櫃 柜 櫅 𪲎 +櫍 𬃊 櫓 橹 櫚 榈 櫛 栉 @@ -1050,6 +1066,7 @@ 洩 泄 洶 汹 浹 浃 +浿 𬇙 涇 泾 涗 涚 涼 凉 @@ -1096,6 +1113,7 @@ 滿 满 漁 渔 漊 溇 +漍 𬇹 漚 沤 漢 汉 漣 涟 @@ -1127,6 +1145,7 @@ 澤 泽 澦 滪 澩 泶 +澫 𬇕 澬 𫞚 澮 浍 澱 淀 @@ -1206,13 +1225,16 @@ 熗 炝 熚 𤇹 熡 𤋏 +熰 𬉼 熱 热 熲 颎 熾 炽 +燀 𬊤 燁 烨 燈 灯 燉 炖 燒 烧 +燖 𬊈 燙 烫 燜 焖 營 营 @@ -1292,6 +1314,8 @@ 瑽 𪻐 璉 琏 璊 𫞩 +璕 𬍤 +璗 𬍡 璝 𪻺 璡 琎 璣 玑 @@ -1306,6 +1330,7 @@ 璾 𫞦 璿 璇 瓄 𪻨 +瓅 𬍛 瓊 琼 瓏 珑 瓔 璎 @@ -1424,6 +1449,7 @@ 礄 硚 礆 硷 礎 础 +礐 𬒈 礒 𥐟 礙 碍 礦 矿 @@ -1494,6 +1520,7 @@ 篔 筼 篘 𥬠 篠 筿 +篢 𬕂 篤 笃 篩 筛 篳 筚 @@ -1540,6 +1567,7 @@ 糾 纠 紀 纪 紂 纣 +紃 𬘓 約 约 紅 红 紆 纡 @@ -1560,6 +1588,7 @@ 紛 纷 紜 纭 紝 纴 +紞 𬘘 紟 𫄛 紡 纺 紬 䌷 @@ -1594,6 +1623,7 @@ 給 给 絧 𫄡 絨 绒 +絪 𬘡 絰 绖 統 统 絲 丝 @@ -1604,24 +1634,29 @@ 綀 𦈌 綁 绑 綃 绡 +綄 𬘫 綆 绠 綇 𦈋 綈 绨 綉 绣 綋 𫟄 綌 绤 +綎 𬘩 綏 绥 綐 䌼 綑 捆 經 经 綖 𫄧 綜 综 +綝 𬘭 綞 缍 綟 𫄫 綠 绿 綡 𫟅 綢 绸 綣 绻 +綧 𬘯 +綪 𬘬 綫 线 綬 绶 維 维 @@ -1695,6 +1730,7 @@ 縬 𦈚 縭 缡 縮 缩 +縯 𬙂 縰 𫄳 縱 纵 縲 缧 @@ -1744,6 +1780,7 @@ 繾 缱 繿 䍀 纁 𫄸 +纆 𬙊 纇 颣 纈 缬 纊 纩 @@ -1752,6 +1789,7 @@ 纏 缠 纓 缨 纔 才 +纕 𬙋 纖 纤 纗 𫄹 纘 缵 @@ -1887,6 +1925,7 @@ 蓯 苁 蓴 莼 蓽 荜 +蔄 𬜬 蔔 卜 蔘 参 蔞 蒌 @@ -1944,7 +1983,7 @@ 蘆 芦 蘇 苏 蘊 蕴 -蘋 苹 蘋 +蘋 苹 𬞟 蘚 藓 蘞 蔹 蘟 𦻕 @@ -1953,6 +1992,7 @@ 蘺 蓠 蘿 萝 虆 蔂 +虉 𬟁 處 处 虛 虚 虜 虏 @@ -1962,6 +2002,7 @@ 蛺 蛱 蛻 蜕 蜆 蚬 +蝀 𬟽 蝕 蚀 蝟 猬 蝦 虾 @@ -2076,6 +2117,7 @@ 訊 讯 訌 讧 討 讨 +訏 𬣙 訐 讦 訑 𫍙 訒 讱 @@ -2117,6 +2159,7 @@ 詗 诇 詘 诎 詛 诅 +詝 𬣞 詞 词 詠 咏 詡 诩 @@ -2124,6 +2167,7 @@ 詣 诣 試 试 詩 诗 +詪 𬣳 詫 诧 詬 诟 詭 诡 @@ -2180,12 +2224,14 @@ 諏 诹 諑 诼 諒 谅 +諓 𬣡 論 论 諗 谂 諛 谀 諜 谍 諝 谞 諞 谝 +諟 𬤊 諡 谥 諢 诨 諣 𫍩 @@ -2199,6 +2245,7 @@ 諯 𫍱 諰 𫍰 諱 讳 +諲 𬤇 諳 谙 諴 𫍯 諶 谌 @@ -2246,6 +2293,7 @@ 譎 谲 譏 讥 譑 𫍤 +譓 𬤝 譖 谮 識 识 譙 谯 @@ -2418,6 +2466,7 @@ 軗 𨐅 軛 轭 軜 𫐇 +軝 𬨂 軟 软 軤 轷 軨 𫐉 @@ -2461,6 +2510,7 @@ 輮 𫐓 輯 辑 輳 辏 +輶 𬨎 輷 𫐒 輸 输 輻 辐 @@ -2529,6 +2579,7 @@ 鄖 郧 鄟 𫑘 鄧 邓 +鄩 𬩽 鄭 郑 鄰 邻 鄲 郸 @@ -2547,6 +2598,7 @@ 醫 医 醬 酱 醱 酦 +醲 𬪩 醶 𫑷 釀 酿 釁 衅 @@ -2572,11 +2624,13 @@ 釩 钒 釲 𫟳 釳 𨰿 +釴 𬬩 釵 钗 釷 钍 釹 钕 釺 钎 釾 䥺 +釿 𬬱 鈀 钯 鈁 钫 鈃 钘 @@ -2623,6 +2677,7 @@ 鉆 钻 鉈 铊 鉉 铉 +鉊 𬬿 鉋 铇 鉍 铋 鉑 铂 @@ -2636,9 +2691,12 @@ 鉠 𫓭 鉢 钵 鉤 钩 +鉥 𬬸 鉦 钲 +鉧 𬭁 鉬 钼 鉭 钽 +鉮 𬬹 鉳 锫 鉶 铏 鉷 𫟹 @@ -2688,6 +2746,7 @@ 鋉 𨱈 鋌 铤 鋏 铗 +鋐 𬭎 鋒 锋 鋗 𫓶 鋙 铻 @@ -2708,6 +2767,7 @@ 鋱 铽 鋶 锍 鋸 锯 +鋹 𬬮 鋼 钢 錀 𬬭 錁 锞 @@ -2726,6 +2786,7 @@ 錛 锛 錜 𫓻 錝 𫓽 +錞 𬭚 錟 锬 錠 锭 錡 锜 @@ -2766,6 +2827,7 @@ 鍥 锲 鍩 锘 鍬 锹 +鍭 𬭤 鍮 𨱎 鍰 锾 鍵 键 @@ -2780,6 +2842,7 @@ 鎊 镑 鎌 镰 鎍 𫔅 +鎓 𬭩 鎔 镕 鎖 锁 鎘 镉 @@ -2814,6 +2877,7 @@ 鏉 𨱒 鏌 镆 鏍 镙 +鏏 𬭬 鏐 镠 鏑 镝 鏗 铿 @@ -2834,6 +2898,7 @@ 鏷 镤 鏹 镪 鏺 䥽 +鏻 𬭸 鏽 锈 鏾 𫔌 鐃 铙 @@ -2856,6 +2921,7 @@ 鐦 锎 鐧 锏 鐨 镄 +鐩 𬭼 鐪 𫓺 鐫 镌 鐮 镰 @@ -2940,6 +3006,7 @@ 闆 板 闇 暗 闈 闱 +闉 𬮱 闊 阔 闋 阕 闌 阑 @@ -2970,10 +3037,13 @@ 隉 陧 隊 队 階 阶 +隑 𬮿 隕 陨 際 际 +隤 𬯎 隨 随 險 险 +隮 𬯀 隯 陦 隱 隐 隴 陇 @@ -3044,9 +3114,11 @@ 頑 顽 頒 颁 頓 顿 +頔 𬱖 頗 颇 領 领 頜 颌 +頠 𬱟 頡 颉 頤 颐 頦 颏 @@ -3195,11 +3267,13 @@ 馼 𫘜 駁 驳 駃 𫘝 +駉 𬳶 駊 𫘟 駎 𩧨 駐 驻 駑 驽 駒 驹 +駓 𬳵 駔 驵 駕 驾 駘 骀 @@ -3214,6 +3288,7 @@ 駤 𫘠 駧 𩧲 駩 𩧴 +駪 𬳽 駫 𫘡 駭 骇 駰 骃 @@ -3221,6 +3296,7 @@ 駶 𩧺 駸 骎 駻 𫘣 +駼 𬳿 駿 骏 騁 骋 騂 骍 @@ -3233,12 +3309,14 @@ 騍 骒 騎 骑 騏 骐 +騑 𬴂 騔 𩨀 騖 骛 騙 骗 騚 𩨊 騜 𫘩 騝 𩨃 +騞 𬴃 騟 𩨈 騠 𫘨 騤 骙 @@ -3267,6 +3345,7 @@ 驋 𩧯 驌 骕 驍 骁 +驎 𬴊 驏 骣 驓 𫘯 驕 骄 @@ -3317,11 +3396,13 @@ 魷 鱿 魺 鲄 魽 𫠐 +鮀 𬶍 鮁 鲅 鮃 鲆 鮄 𫚒 鮅 𫚑 鮆 𫚖 +鮈 𬶋 鮊 鲌 鮋 鲉 鮍 鲏 @@ -3335,6 +3416,8 @@ 鮝 鲞 鮞 鲕 鮟 𩽾 +鮠 𬶏 +鮡 𬶐 鮣 䲟 鮤 𫚓 鮦 鲖 @@ -3378,6 +3461,7 @@ 鯴 鲺 鯶 𩽼 鯷 鳀 +鯻 𬶟 鯽 鲫 鯾 𫚣 鯿 鳊 @@ -3387,6 +3471,7 @@ 鰆 䲠 鰈 鲽 鰉 鳇 +鰊 𬶠 鰋 𫚢 鰌 䲡 鰍 鳅 @@ -3414,6 +3499,7 @@ 鰲 鳌 鰳 鳓 鰵 鳘 +鰶 𬶭 鰷 鲦 鰹 鲣 鰺 鲹 @@ -3421,6 +3507,7 @@ 鰼 鳛 鰽 𫚧 鰾 鳔 +鱀 𬶨 鱂 鳉 鱄 𫚋 鱅 鳙 @@ -3434,6 +3521,7 @@ 鱖 鳜 鱗 鳞 鱘 鲟 +鱚 𬶮 鱝 鲼 鱟 鲎 鱠 鲙 @@ -3495,6 +3583,7 @@ 鵂 鸺 鵃 鸼 鵊 𫛥 +鵏 𬷕 鵐 鹀 鵑 鹃 鵒 鹆 @@ -3527,6 +3616,7 @@ 鶗 𫛸 鶘 鹕 鶚 鹗 +鶠 𬸘 鶡 鹖 鶥 鹛 鶦 𫛷 @@ -3536,6 +3626,7 @@ 鶭 𫛯 鶯 莺 鶰 𫛫 +鶱 𬸣 鶲 鹟 鶴 鹤 鶹 鹠 @@ -3557,6 +3648,7 @@ 鷗 鸥 鷙 鸷 鷚 鹨 +鷟 𬸦 鷣 𫜃 鷤 𫛴 鷥 鸶 @@ -3564,6 +3656,7 @@ 鷨 𪉊 鷩 𫜁 鷫 鹔 +鷭 𬸪 鷯 鹩 鷲 鹫 鷳 鹇 @@ -3580,6 +3673,7 @@ 鸋 𫛢 鸌 鹱 鸏 鹲 +鸑 𬸚 鸕 鸬 鸗 𫛟 鸘 鹴 @@ -3629,6 +3723,7 @@ 齔 龀 齕 龁 齗 龂 +齘 𬹼 齙 龅 齜 龇 齟 龃 @@ -3641,12 +3736,14 @@ 齪 龊 齬 龉 齭 𫜭 +齮 𬺈 齯 𫠜 齰 𫜬 齲 龋 齴 𫜮 齶 腭 齷 龌 +齼 𬺓 齾 𫜰 龍 龙 龎 厐 @@ -3678,6 +3775,7 @@ 𡄣 𠵸 𡅏 𠲥 𡅯 𪢖 +𡑍 𫭼 𡑭 𡋗 𡓁 𪤄 𡓾 𡋀 @@ -3757,6 +3855,7 @@ 𥖅 𥐯 𥖲 𪿞 𥗇 𪿵 +𥗽 𬒗 𥜐 𫀓 𥜰 𫀌 𥞵 𥞦 diff --git a/data/dictionary/TSPhrases.txt b/data/dictionary/TSPhrases.txt index dee9754..06e6596 100644 --- a/data/dictionary/TSPhrases.txt +++ b/data/dictionary/TSPhrases.txt @@ -29,6 +29,7 @@ 乾隆 乾隆 乾隆年間 乾隆年间 乾隆皇帝 乾隆皇帝 +二噁英 二𫫇英 以免藉口 以免借口 以功覆過 以功复过 侔德覆載 侔德复载 @@ -131,7 +132,6 @@ 申覆 申复 畢昇 毕昇 發覆 发复 -盼既示覆 盼既示复 瞭如 了如 瞭如指掌 了如指掌 瞭望 瞭望 diff --git a/data/dictionary/TWPhrasesIT.txt b/data/dictionary/TWPhrasesIT.txt index d8692ec..8960ce8 100644 --- a/data/dictionary/TWPhrasesIT.txt +++ b/data/dictionary/TWPhrasesIT.txt @@ -230,9 +230,8 @@ U盤 隨身碟 登錄 登入 發佈 釋出 發送 傳送 -皮膚 面板 盤片 碟片 -盤符 碟符 +盤符 磁碟機代號 目標代碼 目的碼 相冊 相簿 矢量 向量 @@ -294,6 +293,7 @@ U盤 隨身碟 藍牙 藍芽 虛函數 虛擬函式 虛擬機 虛擬機器 +虛擬機器 虛擬機器 表達式 表示式 運算式 複印 影印 複選按鈕 覈取按鈕 diff --git a/data/dictionary/TWPhrasesOther.txt b/data/dictionary/TWPhrasesOther.txt index 265bf1a..22b3b89 100644 --- a/data/dictionary/TWPhrasesOther.txt +++ b/data/dictionary/TWPhrasesOther.txt @@ -34,3 +34,4 @@ 鐦 鉲 鑥 鎦 黃宏 黃宏 +借記卡 簽帳金融卡 diff --git a/data/scheme/ts_multi.txt b/data/scheme/ts_multi.txt index 9ac401f..7ab04df 100644 --- a/data/scheme/ts_multi.txt +++ b/data/scheme/ts_multi.txt @@ -10,3 +10,5 @@ 衹 衹 只 著 着 著 沈 沈 沉 +噁 恶 𫫇 「𫫇」爲化學名詞用字,如「二𫫇英」。 可恶 恶心 二𫫇英 +蘋 苹 𬞟 「𬞟」爲一種蕨類植物,生於淺水,四片小葉似「田」字,亦稱「田字草」,音pin2,粵音pan4。蘋果之「苹」音ping2,粵音ping4。 diff --git a/package.json b/package.json index f645336..d629b3f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opencc", - "version": "1.1.3", + "version": "1.1.4", "description": "Conversion between Traditional and Simplified Chinese", "author": "Carbo Kuo ", "license": "Apache-2.0", diff --git a/release-pypi-linux.sh b/release-pypi-linux.sh index c74f8d0..4748001 100644 --- a/release-pypi-linux.sh +++ b/release-pypi-linux.sh @@ -25,7 +25,7 @@ bash ${MINICONDA_FILENAME} -b -f -p $HOME/miniconda3 export PATH=$HOME/miniconda3/bin:$PATH eval "$(conda shell.bash hook)" -for VERSION in 2.7 3.5 3.6 3.7 3.8 3.9; do +for VERSION in 3.7 3.8 3.9 3.10; do # Create and activate environment conda create -y -n py$VERSION python=$VERSION conda activate py$VERSION diff --git a/release-pypi-macos.sh b/release-pypi-macos.sh index e8d958f..2862fbf 100644 --- a/release-pypi-macos.sh +++ b/release-pypi-macos.sh @@ -12,7 +12,7 @@ bash ${MINICONDA_FILENAME} -b -f -p $HOME/miniconda3 export PATH=$HOME/miniconda3/bin:$PATH eval "$(conda shell.bash hook)" -for VERSION in 2.7 3.5 3.6 3.7 3.8 3.9; do +for VERSION in 3.7 3.8 3.9 3.10; do # Create and activate environment conda create -y -n py$VERSION python=$VERSION conda activate py$VERSION diff --git a/release-pypi-windows.cmd b/release-pypi-windows.cmd index 5bcbc2b..58dc212 100644 --- a/release-pypi-windows.cmd +++ b/release-pypi-windows.cmd @@ -1,7 +1,7 @@ @echo off setlocal EnableDelayedExpansion -SET VERSIONS=2.7 3.5 3.6 3.7 3.8 3.9 +SET VERSIONS=3.7 3.8 3.9 3.10 SET SOURCEDIR=%cd% REM Build packages diff --git a/setup.py b/setup.py index af52ba6..ed06259 100644 --- a/setup.py +++ b/setup.py @@ -202,7 +202,6 @@ setuptools.setup( 'Natural Language :: Chinese (Simplified)', 'Natural Language :: Chinese (Traditional)', 'Programming Language :: Python', - 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 3', 'License :: OSI Approved :: Apache Software License', 'Topic :: Scientific/Engineering', diff --git a/src/DictConverter.cpp b/src/DictConverter.cpp index 07cf324..40e46d1 100644 --- a/src/DictConverter.cpp +++ b/src/DictConverter.cpp @@ -58,10 +58,10 @@ SerializableDictPtr ConvertDict(const std::string& format, const DictPtr dict) { } namespace opencc { -void ConvertDictionary(const std::string inputFileName, - const std::string outputFileName, - const std::string formatFrom, - const std::string formatTo) { +void ConvertDictionary(const std::string& inputFileName, + const std::string& outputFileName, + const std::string& formatFrom, + const std::string& formatTo) { DictPtr dictFrom = LoadDictionary(formatFrom, inputFileName); SerializableDictPtr dictTo = ConvertDict(formatTo, dictFrom); dictTo->SerializeToFile(outputFileName); diff --git a/src/DictConverter.hpp b/src/DictConverter.hpp index 4bc4e8a..f911c4f 100644 --- a/src/DictConverter.hpp +++ b/src/DictConverter.hpp @@ -25,8 +25,8 @@ namespace opencc { * Converts a dictionary from a format to another. * @ingroup opencc_cpp_api */ -OPENCC_EXPORT void ConvertDictionary(const std::string inputFileName, - const std::string outputFileName, - const std::string formatFrom, - const std::string formatTo); +OPENCC_EXPORT void ConvertDictionary(const std::string& inputFileName, + const std::string& outputFileName, + const std::string& formatFrom, + const std::string& formatTo); } // namespace opencc diff --git a/src/Lexicon.cpp b/src/Lexicon.cpp index a361245..f5e5140 100644 --- a/src/Lexicon.cpp +++ b/src/Lexicon.cpp @@ -30,9 +30,12 @@ bool Lexicon::IsSorted() { DictEntry::UPtrLessThan); } -bool Lexicon::IsUnique() { +bool Lexicon::IsUnique(std::string* dupkey) { for (size_t i = 1; i < entries.size(); ++i) { if (entries[i - 1]->Key() == entries[i]->Key()) { + if (dupkey) { + *dupkey = entries[i]->Key(); + } return false; } } diff --git a/src/Lexicon.hpp b/src/Lexicon.hpp index bb8724c..6889128 100644 --- a/src/Lexicon.hpp +++ b/src/Lexicon.hpp @@ -47,7 +47,8 @@ public: bool IsSorted(); // Returns true if every key unique (after sorted). - bool IsUnique(); + // When dupkey is set, it is set to the duplicate key. + bool IsUnique(std::string* dupkey = nullptr); const DictEntry* At(size_t index) const { return entries.at(index).get(); } diff --git a/src/TextDict.cpp b/src/TextDict.cpp index d256850..c81b311 100644 --- a/src/TextDict.cpp +++ b/src/TextDict.cpp @@ -35,6 +35,9 @@ static size_t GetKeyMaxLength(const LexiconPtr& lexicon) { static DictEntry* ParseKeyValues(const char* buff, size_t lineNum) { size_t length; + if (buff == nullptr || UTF8Util::IsLineEndingOrFileEnding(*buff)) { + return nullptr; + } const char* pbuff = UTF8Util::FindNextInline(buff, '\t'); if (UTF8Util::IsLineEndingOrFileEnding(*pbuff)) { throw InvalidTextDictionary("Tabular not found " + std::string(buff), @@ -66,7 +69,10 @@ static LexiconPtr ParseLexiconFromFile(FILE* fp) { UTF8Util::SkipUtf8Bom(fp); size_t lineNum = 1; while (fgets(buff, ENTRY_BUFF_SIZE, fp)) { - lexicon->Add(ParseKeyValues(buff, lineNum)); + DictEntry* entry = ParseKeyValues(buff, lineNum); + if (entry != nullptr) { + lexicon->Add(entry); + } lineNum++; } return lexicon; @@ -88,8 +94,10 @@ TextDictPtr TextDict::NewFromSortedFile(FILE* fp) { TextDictPtr TextDict::NewFromFile(FILE* fp) { const LexiconPtr& lexicon = ParseLexiconFromFile(fp); lexicon->Sort(); - if (!lexicon->IsUnique()) { - throw InvalidFormat("The text dictionary contains duplicated keys."); + std::string dupkey; + if (!lexicon->IsUnique(&dupkey)) { + throw InvalidFormat( + "The text dictionary contains duplicated keys: " + dupkey + "."); } return TextDictPtr(new TextDict(lexicon)); } diff --git a/src/TextDictTest.cpp b/src/TextDictTest.cpp index e0dff79..7a8db0f 100644 --- a/src/TextDictTest.cpp +++ b/src/TextDictTest.cpp @@ -40,6 +40,18 @@ TEST_F(TextDictTest, Deserialization) { TestDict(deserialized); } +TEST_F(TextDictTest, DeserializationEmptyLine) { + FILE* fp = fopen(fileName.c_str(), "w"); + fprintf(fp, "A\tB\n\n\nC\tD E\n\n"); + fclose(fp); + const TextDictPtr& dict = SerializableDict::NewFromFile(fileName); + EXPECT_EQ(dict->GetLexicon()->Length(), 2); + + Optional entry = dict->opencc::Dict::Match("A"); + EXPECT_TRUE(!entry.IsNull()); + EXPECT_EQ(utf8("A"), entry.Get()->Key()); +} + TEST_F(TextDictTest, ExactMatch) { auto there = textDict->Match("積羽沉舟", 12); EXPECT_FALSE(there.IsNull()); diff --git a/src/UTF8Util.hpp b/src/UTF8Util.hpp index f1b4b14..a04a6fc 100644 --- a/src/UTF8Util.hpp +++ b/src/UTF8Util.hpp @@ -152,7 +152,7 @@ public: } /** - * Copies a substd::string with given length to a new std::string. + * Copies a substring with given length to a new string. */ static std::string FromSubstr(const char* str, size_t length) { std::string newStr; diff --git a/test/testcases/s2t.ans b/test/testcases/s2t.ans index 757df61..b402a98 100644 --- a/test/testcases/s2t.ans +++ b/test/testcases/s2t.ans @@ -6,4 +6,5 @@ 曾經有一份真誠的愛情放在我面前,我沒有珍惜,等我失去的時候我才後悔莫及。人事間最痛苦的事莫過於此。如果上天能夠給我一個再來一次得機會,我會對那個女孩子說三個字,我愛你。如果非要在這份愛上加個期限,我希望是,一萬年。 新的理論被發現了。 金胄不是金色的甲冑。 -經理發現後勸諭兩人 \ No newline at end of file +經理發現後勸諭兩人 +想到自己一緊張就口吃,我就沒胃口喫飯 \ No newline at end of file diff --git a/test/testcases/s2t.in b/test/testcases/s2t.in index ce309ae..b1db027 100644 --- a/test/testcases/s2t.in +++ b/test/testcases/s2t.in @@ -6,4 +6,5 @@ 曾经有一份真诚的爱情放在我面前,我没有珍惜,等我失去的时候我才后悔莫及。人事间最痛苦的事莫过于此。如果上天能够给我一个再来一次得机会,我会对那个女孩子说三个字,我爱你。如果非要在这份爱上加个期限,我希望是,一万年。 新的理论被发现了。 金胄不是金色的甲胄。 -经理发现后劝谕两人 \ No newline at end of file +经理发现后劝谕两人 +想到自己一紧张就口吃,我就没胃口吃饭 \ No newline at end of file diff --git a/test/testcases/t2s.ans b/test/testcases/t2s.ans index 5185049..299716a 100644 --- a/test/testcases/t2s.ans +++ b/test/testcases/t2s.ans @@ -1 +1,2 @@ -曾经有一份真诚的爱情放在我面前,我没有珍惜,等我失去的时候我才后悔莫及。人事间最痛苦的事莫过于此。如果上天能够给我一个再来一次得机会,我会对那个女孩子说三个字,我爱你。如果非要在这份爱上加个期限,我希望是,一万年。 \ No newline at end of file +曾经有一份真诚的爱情放在我面前,我没有珍惜,等我失去的时候我才后悔莫及。人事间最痛苦的事莫过于此。如果上天能够给我一个再来一次得机会,我会对那个女孩子说三个字,我爱你。如果非要在这份爱上加个期限,我希望是,一万年。 +二𫫇英 \ No newline at end of file diff --git a/test/testcases/t2s.in b/test/testcases/t2s.in index 86de44a..eef2f34 100644 --- a/test/testcases/t2s.in +++ b/test/testcases/t2s.in @@ -1 +1,2 @@ -曾經有一份真誠的愛情放在我面前,我沒有珍惜,等我失去的時候我才後悔莫及。人事間最痛苦的事莫過於此。如果上天能夠給我一個再來一次得機會,我會對那個女孩子說三個字,我愛你。如果非要在這份愛上加個期限,我希望是,一萬年。 \ No newline at end of file +曾經有一份真誠的愛情放在我面前,我沒有珍惜,等我失去的時候我才後悔莫及。人事間最痛苦的事莫過於此。如果上天能夠給我一個再來一次得機會,我會對那個女孩子說三個字,我愛你。如果非要在這份愛上加個期限,我希望是,一萬年。 +二噁英 \ No newline at end of file